Get Youtube and Vimeo Video Length

Course- PHP Tutorial >

Let write a very simple php function to get the video length form Youtube or Vimeo video URL. Here we have created 4 different functions "curl_get", "youtube_id_from_url", getVideolength and "videoDetails". curl_get function required for vimeo and youtube_id_from_url function will get video id from URL. getVideolength calculate the length of the Youtube video.

 

<?php
function curl_get($url){
  $curl = curl_init($url);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($curl, CURLOPT_TIMEOUT, 30);
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  $return = curl_exec($curl);
  curl_close($curl);
  return $return;
}

function youtube_id_from_url($url){
$pattern = '%^# Match any youtube URL
(?:https?://)? # Optional scheme. Either http or https
(?:www\.)? # Optional www subdomain
(?: # Group host alternatives
youtu\.be/ # Either youtu.be,
| youtube\.com # or youtube.com
(?: # Group path alternatives
/embed/ # Either /embed/
| /v/ # or /v/
| /watch\?v= # or /watch\?v=
) # End path alternatives.
) # End host alternatives.
([\w-]{10,12}) # Allow 10-12 for 11 char youtube id.$%x';
$result = preg_match($pattern, $url, $matches);
if (false !== $result) {
return $matches[1];
}
return false;
}

function getVideolength($videoid='') {
define('YT_API_URL', 'http://gdata.youtube.com/feeds/api/videos?q=');
$video_id = $videoid;
//Using cURL php extension to make the request to youtube API
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, YT_API_URL . $video_id);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//$feed holds a rss feed xml returned by youtube API
$feed = curl_exec($ch);
curl_close($ch);

//Using SimpleXML to parse youtube's feed
$xml = simplexml_load_string($feed);
$entry = $xml->entry[0];
$media = $entry->children('media', true);
$group = $media->group;
$vid_duration = $content_attributes['duration'];
$duration_formatted = str_pad(floor($vid_duration / 60), 2, 
'0', STR_PAD_LEFT) . ':' . str_pad($vid_duration % 60, 2, '0', STR_PAD_LEFT);
return $duration_formatted;
}



function videoDetails($url){ $video_url = parse_url($url); if ($video_url['host'] == 'www.youtube.com' || $video_url['host'] == 'youtube.com') { $videoid = youtube_id_from_url($url); $video_length = getVideolength($videoid); return $video_length; }else if ($video_url['host'] == 'www.youtu.be' || $image_url['host'] == 'youtu.be') { $videoid = youtube_id_from_url($url); $video_length = getVideolength($videoid); return $video_length; }else if ($video_url['host'] == 'www.vimeo.com' || $video_url['host'] == 'vimeo.com') { $oembed_endpoint = 'http://vimeo.com/api/oembed'; $json_url = $oembed_endpoint.'.json?url='. rawurlencode($video_url).'&width=640'; $video_arr = curl_get($json_url); $video_arr = json_decode($video_arr, TRUE); $vid_duration = $video_arr['duration']; $video_length = str_pad(floor($vid_duration / 60), 2, '0', STR_PAD_LEFT) . ':' .str_pad($vid_duration % 60, 2, '0', STR_PAD_LEFT); return $video_length; } } ?>

 

Call in Action

<?php
     $youtube_video = "http://www.youtube.com/watch?v=myHGDkWoxbw";
     $vimeo_video = "http://vimeo.com/45684858";
     
     $youtube_video_dtls = videoDetails($youtube_video);
     $vimeo_video_dtls   = videoDetails($vimeo_video);
?>